"""
可视化模型的一些信息，如训练损失的下降折线图、模型准确度折线图、MFCC特征图
"""


from matplotlib import pyplot as plt
import pandas as pd


def plot_loss_acc_lr():
    """ 绘制训练过程中 loss 值变化、 acc 值变化、学习率变化
    """

    # 读数据
    data = pd.read_csv("train_log.csv")
    x = range(1, 301)  # 横轴

    # 创建多个绘图区
    figure, axes = plt.subplots(nrows=3, ncols=1, figsize=(25, 10), dpi=80)

    # 绘制 loss 变化曲线
    axes[0].plot(x, data["train_loss"], color="m", linestyle="-.", label="train loss")
    axes[0].plot(x, data["test_loss"], label="train loss")
    axes[0].legend()  # 显示图例
    axes[0].set_xticks(range(0, 301, 50))  # 设置刻度
    axes[0].set_xlabel("epoch")
    axes[0].set_ylabel("loss")
    axes[0].set_title("Loss value change curve")

    # 绘制 acc 变化曲线
    axes[1].plot(x, data["train_acc"], color="m", linestyle="-.", label="train acc")
    axes[1].plot(x, data["test_acc"], label="train acc")
    axes[1].grid(True)
    axes[1].legend()  # 显示图例
    axes[1].set_xticks(range(0, 301, 10))  # 设置刻度
    axes[1].set_xlabel("epoch")
    axes[1].set_ylabel("acc")
    axes[1].set_title("Acc value change curve")

    # 绘制 lr 变化曲线
    axes[2].plot(x, data["lr"], color="m", linestyle="-.", label="learn rate")
    axes[2].legend()  # 显示图例
    axes[2].set_xticks(range(0, 301, 50))  # 设置刻度
    axes[2].set_xlabel("epoch")
    axes[2].set_ylabel("lr")
    axes[2].set_title("Learn rate change curve")

    plt.show()


def plot_data():
    """ 单独绘制各个数据 """

    # 读数据
    data = pd.read_csv("train_log.csv")
    x = range(1, 101)
    font = {'size': 20}

    # 绘图
    plt.figure(figsize=(12, 8), dpi=80)

    # 绘制Loss
    plt.plot(x, data["train_loss"], color="m", linestyle="-.", label="train loss")
    plt.plot(x, data["test_loss"], label="test loss")
    plt.legend(loc="upper right", prop=font)
    plt.xticks(range(0, 101, 20))
    plt.xlabel("Epoch", fontdict=font)
    plt.ylabel("Loss", fontdict=font)
    plt.title("Loss value change curve", fontdict=font)
    plt.savefig("./result/Loss.png")
    plt.close()

    # 绘制Acc
    plt.plot(x, data["train_acc"], color="m", linestyle="-.", label="train acc")
    plt.plot(x, data["test_acc"], label="test acc")
    plt.legend(loc="lower right", prop=font)
    plt.xticks(range(0, 101, 20))
    plt.xlabel("Epoch", fontdict=font)
    plt.ylabel("Acc", fontdict=font)
    plt.title("Acc value change curve", fontdict=font)
    plt.savefig("./result/Acc.png")
    plt.close()

    # 绘制Lr
    plt.plot(x, data["lr"], color="m", linestyle="-.", label="learn rate")
    plt.legend(loc="upper right", prop=font)
    plt.xticks(range(0, 101, 20))
    plt.xlabel("Epoch", fontdict=font)
    plt.ylabel("Lr", fontdict=font)
    plt.title("Learn rate change curve", fontdict=font)
    plt.savefig("./result/Lr.png")
    plt.close()


if __name__ == "__main__":
    # plot_loss_acc_lr()
    plot_data()
